package com.wondersgroup.yly.vs.impl;

import com.alibaba.dubbo.config.annotation.Reference;
import com.mseap.dtx.api.annotation.ATxSupport;
import com.mseap.framework.exception.BusinessException;
import com.wondersgroup.yly.api.DemoApi;
import com.wondersgroup.yly.api.ExampleApi;
import com.wondersgroup.yly.dto.DemoDTO;
import com.wondersgroup.yly.dto.ExampleDTO;
import com.wondersgroup.yly.vs.ReliableVs;
import org.springframework.stereotype.Service;

/**
 * @program: yly-demo
 * @description:
 * @author: Zhangxiao
 * @create: 2019-10-08 13:13
 **/
@Service
@ATxSupport("可靠消息发起者：ReliableVs")
public class ReliableVsImpl implements ReliableVs {

    @Reference
    private DemoApi demoApi;

    @Reference
    private ExampleApi exampleApi;

    @Override
    public void tccTest(ExampleDTO exampleDTO) throws BusinessException {
        Long id = exampleApi.insert(exampleDTO);

        DemoDTO demoDTO = new DemoDTO();
        demoDTO.setId(exampleDTO.getId());
        demoDTO.setName(exampleDTO.getName());
        demoDTO.setAge(26);
        demoDTO.setFkBId(id);
        demoApi.updateByPrimaryKey(demoDTO);
        if(true){
            throw new BusinessException("400", "I throw a new Exception！！！");
        }
    }

    @Override
    public void tccTest2(ExampleDTO exampleDTO) throws BusinessException {
        Long id = exampleApi.insert(exampleDTO);

        DemoDTO demoDTO = new DemoDTO();
        demoDTO.setId(exampleDTO.getId());
        demoDTO.setName(exampleDTO.getName());
        demoDTO.setAge(26);
        demoDTO.setFkBId(id);
        demoApi.insert(demoDTO);
    }

    @Override
    public void updateTest(DemoDTO demoDTO)  throws BusinessException {
        ExampleDTO exampleDTO = new ExampleDTO();
        exampleDTO.setId(demoDTO.getFkBId());
        exampleDTO.setName(demoDTO.getName());
        exampleApi.updateByPrimaryKey(exampleDTO);

        demoApi.updateByPrimaryKey(demoDTO);

        if(true){
            throw new BusinessException("400", "--------------BusinessException");
        }

    }
}
